package onglets.classe;

import java.awt.Desktop;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JComboBox;
import javax.swing.JButton;

import bean.Apprenti;
import bean.Entreprise;
import bean.Formateur;
import bean.Repertoires;
import bean.Utilisateur;

import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.SwingConstants;

import util.FTPUtil;
import metier.ApprentiMetier;
import metier.EntrepriseMetier;
import metier.FormateurMetier;
import metier.RepertoiresMetier;
import metier.UtilisateurMetier;


public class Plannings extends JPanel implements ActionListener{

	/*********************
	 * Description : Pannel qui aura le planning Annuel des cours de BTS, ce planning sera en XLS ou DOC
	 * Auteur : Alexis COUBARD
	 * Date : 20/01/2015
	 *********************/
	private Apprenti apprenti;
	private JComboBox<String> comboBoxAnnuel;
	private List<Integer> idsAnnuel; 
	private JButton FichierVueAnnuel;
	private JLabel lblPlanningAnnuel;
	
	private JComboBox<String> comboBoxHebdo;
	private List<Integer> idsHebdo;
	private JButton FichierVueHebdo;
	private JLabel lblPlanningHebdo;

	private Utilisateur utilisateur;
	
	public Plannings(Utilisateur utilisateur)
	{
		super();
		setLayout(null);
		//this.apprenti = ApprentiMetier.getInstance().getByIdUtilisateur(utilisateur.getId_utilisateur()).get(0);
		this.utilisateur=utilisateur;
		comboBoxAnnuel = new JComboBox<String>();
		idsAnnuel = new ArrayList<Integer>();
		//this.repertoireAnnuel();
		comboBoxAnnuel.setBounds(331, 36, 216, 20);
		add(comboBoxAnnuel);
		
		FichierVueAnnuel = new JButton("Afficher");
		FichierVueAnnuel.setBounds(557, 36, 113, 20);
		FichierVueAnnuel.addActionListener(this);
		add(FichierVueAnnuel);
		
		lblPlanningAnnuel = new JLabel("Planning annuel ");
		lblPlanningAnnuel.setHorizontalAlignment(SwingConstants.CENTER);
		lblPlanningAnnuel.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblPlanningAnnuel.setBounds(331, 11, 339, 14);
		add(lblPlanningAnnuel);
		
		FichierVueHebdo = new JButton("Afficher");
		FichierVueHebdo.setBounds(557, 109, 113, 20);
		FichierVueHebdo.addActionListener(this);
		add(FichierVueHebdo);
		
		comboBoxHebdo = new JComboBox<String>();
		idsHebdo = new ArrayList<Integer>();
		//this.repertoireHebdo();
		comboBoxHebdo.setBounds(331, 109, 216, 20);
		add(comboBoxHebdo);
		
		lblPlanningHebdo = new JLabel("Planning hebdo ");
		lblPlanningHebdo.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblPlanningHebdo.setHorizontalAlignment(SwingConstants.CENTER);
		lblPlanningHebdo.setBounds(331, 84, 339, 14);
		add(lblPlanningHebdo);
		
		this.lesDroits();
		
	}
	/****************************************************************
	 *  Description : permet d'inserer les planning annuel dans le comboBox correspondant
	 ****************************************************************/
	public void repertoireAnnuel(Apprenti apprenti)
	{	
		List<Repertoires> repertoires = new ArrayList<Repertoires>();
		if(apprenti != null && apprenti.getClasse() != null){
			repertoires = RepertoiresMetier.getInstance().recherche(Repertoires.TYPE_PLANNING_ANNUEL, apprenti.getClasse().getId_classe(), null, null, null);
		} else {
			repertoires = RepertoiresMetier.getInstance().recherche(Repertoires.TYPE_PLANNING_ANNUEL, null, null, null, null);
		}
		for (Repertoires repertoire : repertoires)
		{
			idsAnnuel.add(repertoire.getId_repertoire());
			comboBoxAnnuel.addItem(repertoire.getLibelle());
		}
		
	}
	/****************************************************************
	 *  Description : permet d'ouvrir le planning annuel
	 ****************************************************************/
	public void ouvrirFichierAnnuelEnLecture()
	{
		Repertoires repertoire = RepertoiresMetier.getInstance().getById(idsAnnuel.get(comboBoxAnnuel.getSelectedIndex()));
		FTPUtil.connect();
		InputStream planning = FTPUtil.getFile(repertoire.getAdresse());
		// On vérifie que la classe Desktop soit bien supportée :
		if ( Desktop.isDesktopSupported() ) {
			// On récupère l'instance du desktop :
			Desktop desktop = Desktop.getDesktop();
			// On vérifie que la fonction open est bien supportée :
			if (desktop.isSupported(Desktop.Action.OPEN)) {
				// Et on lance l'application associé au fichier pour l'ouvrir :
				File file = FTPUtil.InputStreamToFile(planning, repertoire.getNameFile());
				try {
					desktop.open(file);
				} catch (IOException e1) {
					JOptionPane.showMessageDialog(null,"Le document ne veut pas s'ouvrir", "Planning annuel", JOptionPane.WARNING_MESSAGE);
					e1.printStackTrace();
				}
			}
		}
		FTPUtil.disconnect();
		FTPUtil.setFile(null);
	}
		
	
	public void repertoireHebdo(Apprenti apprenti)
	{
		List<Repertoires> repertoires = new ArrayList<Repertoires>();
		if(apprenti != null && apprenti.getClasse() != null){
			repertoires = RepertoiresMetier.getInstance().recherche(Repertoires.TYPE_PLANNING_HEBDO, apprenti.getClasse().getId_classe(), null, null, null);
		} else {
			repertoires = RepertoiresMetier.getInstance().recherche(Repertoires.TYPE_PLANNING_HEBDO, null, null, null, null);
		}
		for (Repertoires repertoire : repertoires)
		{
			idsHebdo.add(repertoire.getId_repertoire());
			comboBoxHebdo.addItem(repertoire.getLibelle());
		}
	}
	public void ouvrirFichierHebdolEnLecture()
	{
		Repertoires repertoire = RepertoiresMetier.getInstance().getById(idsHebdo.get(comboBoxHebdo.getSelectedIndex()));
		FTPUtil.connect();
		InputStream planning = FTPUtil.getFile(repertoire.getAdresse());
		// On vérifie que la classe Desktop soit bien supportée :
		if ( Desktop.isDesktopSupported() ) {
			// On récupère l'instance du desktop :
			Desktop desktop = Desktop.getDesktop();
			// On vérifie que la fonction open est bien supportée :
			if (desktop.isSupported(Desktop.Action.OPEN)) {
				// Et on lance l'application associé au fichier pour l'ouvrir :
				File file = FTPUtil.InputStreamToFile(planning, repertoire.getNameFile());
				try {
					desktop.open(file);
				} catch (IOException e1) {
					JOptionPane.showMessageDialog(null,"Le document ne veut pas s'ouvrir", "Planning annuel", JOptionPane.WARNING_MESSAGE);
					e1.printStackTrace();
				}
			}
		}
		FTPUtil.disconnect();
		FTPUtil.setFile(null);
	}
	public void lesDroits()
	{
		if(utilisateur.getType1().equals("E")) { //Si c'est un eleve
			Apprenti apprenti = ApprentiMetier.getInstance().getByIdUtilisateur(utilisateur.getId_utilisateur()).get(0);
			this.repertoireAnnuel(apprenti);
			this.repertoireHebdo(apprenti);
		} else if(utilisateur.getType1().equals("M")) { //Si c'est une entreprise
			Entreprise entreprise = EntrepriseMetier.getInstance().getByIdUtilisateur(utilisateur.getId_utilisateur()).get(0);
			Apprenti apprenti = ApprentiMetier.getInstance().getByIdEntreprise(entreprise.getId_entreprise()).get(0);
			this.repertoireAnnuel(apprenti);
			this.repertoireHebdo(apprenti);
		} else { //Si c'est un formateur ou un administrateur
			this.repertoireHebdo(null);
			this.repertoireAnnuel(null);
		}
	}
	@Override
	public void actionPerformed(ActionEvent evt) {
		// TODO Auto-generated method stub
		Object source = evt.getSource();
		if(source == FichierVueAnnuel)
		{
			this.ouvrirFichierAnnuelEnLecture();
		}
		if (source == FichierVueHebdo)
		{
			this.ouvrirFichierHebdolEnLecture();
		}
	}
}

